package com.jyxd.web.util;


import cn.hutool.core.codec.Base64;
import com.jyxd.web.util.id.worker.SnowflakeIdWorker;
import org.hibernate.internal.util.BytesHelper;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * base64图片互转工具类
 */
public class Base64Util {

    /**
     * 获取唯一id
     *
     * @return
     */
    public static Long getId() {
        SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
        long id = idWorker.nextId();
        String base64Id = cn.hutool.core.codec.Base64.encode(BytesHelper.fromLong(id));
        return BytesHelper.asLong(Base64.decode(base64Id));
    }

    //base64字符串转化成图片
    @SuppressWarnings("restriction")
    public static File GenerateImage(String imgStr, String fileDir, String fileName) {   //对字节数组字符串进行Base64解码并生成图片
        if (imgStr == null)
            //图像数据为空
            return null;
        //BASE64Decoder decoder = new BASE64Decoder();
        //图片的输出流
        OutputStream imageOut = null;
        try {
            //Base64解码
            String replace = imgStr.replace(" ", "");
            byte[] b = Base64.decode(replace.getBytes());
            //byte[] b = decoder.decodeBuffer(replace);
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    //调整异常数据
                    b[i] += 256;
                }
            }
            //先判断目录是否存在
            File dir = new File(fileDir);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            //如果文件不存在，则保存。如果存在则跳过？
            String realFilePath = fileDir + File.separator + fileName;
            File file = new File(realFilePath);
            if (!file.exists()) {
                //1.创建文件，作为图片的外壳；
                file.createNewFile();
                imageOut = new FileOutputStream(file);
                imageOut.write(b);
                imageOut.flush();
                imageOut.close();
                return file;
            }
            return file;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    public static String subString(String str, String strStart, String strEnd) {

        /* 找出指定的2个字符在 该字符串里面的 位置 */
        int strStartIndex = str.indexOf(strStart);
        int strEndIndex = str.indexOf(strEnd);

        /* index 为负数 即表示该字符串中 没有该字符 */
        if (strStartIndex < 0) {
            return "字符串 :---->" + str + "<---- 中不存在 " + strStart + ", 无法截取目标字符串";
        }
        if (strEndIndex < 0) {
            return "字符串 :---->" + str + "<---- 中不存在 " + strEnd + ", 无法截取目标字符串";
        }
        /* 开始截取 */
        String result = str.substring(strStartIndex, strEndIndex).substring(strStart.length());
        return result;
    }


}
